package cn.dm.example.immutable;

import cn.dm.annoations.ThreadSafe;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;

@ThreadSafe
public class ImmutableExample3 {

    // 使用guava ImmutableXXX 类,且使用 final 关键字修饰
    private final static ImmutableList<Integer> list = ImmutableList.of(1, 2, 3);

    private final static ImmutableSet set = ImmutableSet.copyOf(list); // 使用 list 初始化 set

    // 下面为两种初始化 map 的方法
    private final static ImmutableMap<Integer, Integer> map = ImmutableMap.of(1, 2, 3, 4);

    private final static ImmutableMap<Integer, Integer> map2 = ImmutableMap.<Integer, Integer>builder()
            .put(1, 2).put(3, 4).put(5, 6).build();


    public static void main(String[] args) {
        /**
         * 测试修改不可变对象中的数据
         *
         * 执行结果如下
         * Exception in thread "main" java.lang.UnsupportedOperationException
         */
        // list.add(4);


        System.out.println(map2.get(3)); // 打印结果为 4
    }
}
